package com.huidatech.mpgdemo.controller;

import com.huidatech.mpgdemo.entity.Article;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;

/**
 * @Description:
 * @Author: Wangzz
 * @Version: 1.0.0
 * @CreateDate: Created in 2021/10/16 21:45
 * @UpdateDate: [dateFormat:YYYY-MM-DD][modifier][description]
 */
// 前端请求编写
//		增加一篇Article，使用POST方法
//		删除一篇Article，使用DELETE方法，参数是id
//		更新一篇Article，使用PUT方法，以id为主键进行更新
//		获取一篇Article，使用GET方法
// @Slf4j 可以直接使用log变量打印日志，不用写private static final Logger log = LoggerFactory.getLogger(HelloController.class);
@Slf4j
@RestController
@RequestMapping("/rest")
public class RestfulAPIController {

	// 获取一篇Article，使用GET方法,根据id查询一篇文章
	@GetMapping("/articles/{id}")
	public AjaxResponse getArticle(@PathVariable("id") Long id) {
		// 使用lombok提供的builder构建对象 模拟结果
		Article article = Article.builder()
				.id(id)
				.author("wangzz")
				.content("GET、POST、PUT、DELETE")
				.createTime(new Date())
				.title("t1")
				.build();
		log.info("article: " + article);
		return AjaxResponse.success(article);
	}


//	@PostMapping("/articles")
//	public AjaxResponse saveArticle(@RequestBody Article article, @RequestHeader String arg){
//		log.info("saveArticle: " + article);
//		return AjaxResponse.success();
//	}

	// 增加一篇Article ，使用POST方法(RequestBody方式接收参数) 【要求参数JSON中的字段和Article中的字段要求一致】
	@ApiOperation(value = "添加文章", notes ="添加新的文章", tags = "Article", httpMethod = "POST")
	@ApiImplicitParams({
			@ApiImplicitParam(name = "title", value = "文章标题", required = true, dataType = "String"),
			@ApiImplicitParam(name = "content",value = "文章内容", required = true, dataType = "String"),
			@ApiImplicitParam(name = "author", value = "文章作者", required = true, dataType = "String")
	})
	@ApiResponses({
			@ApiResponse(code = 200, message = "成功", response = AjaxResponse.class)
	})
	// 增加一篇Article， 使用POST方法（@RequestParam方式接收参数）
	@PostMapping("/articles")
	public AjaxResponse saveArticle(@RequestParam(value = "author") String author,
	                                @RequestParam(value = "title") String title,
	                                @RequestParam(value = "content") String content,
	                                @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	                                @RequestParam Date createTime){
		log.info("saveArticle: "  + createTime);
		return AjaxResponse.success();
	}

	// 更新一篇Article，使用PUT方法，以id为主键进行更新
	@PutMapping("/articles")
	public AjaxResponse updateArticle(@RequestBody Article article){
		if(Objects.isNull(article.getId())){
			// article.id是必须要传入的参数，因为通常是根据id去修改数据
			// TODO 抛出一个自定义的异常
		}
		log.info("updateArticle: " + article);
		return AjaxResponse.success();
	}

	// 删除一篇Article，使用DELETE方法，参数是id
	@DeleteMapping("/articles/{id}")
	public AjaxResponse deleteArticle(@PathVariable("id")Long id){
		log.info("deleteArticle: " + id);
		return AjaxResponse.success();
	}

}
